import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import viteCompression from 'vite-plugin-compression'
import { Plugin as importToCDN } from 'vite-plugin-cdn-import'

// https://vitejs.dev/config/
export default defineConfig({
  base: './',
  plugins: [
    vue(),
    vueJsx(),
    viteCompression({
      // filter: /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i, // 需要压缩的文件
      // threshold: 10240, // 文件容量大于这个值进行压缩
      // algorithm: 'gzip', // 压缩方式
      // ext: 'gz', // 后缀名
      // deleteOriginFile: true, // 压缩后是否删除压缩源文件
    }),
    importToCDN({
      modules: [
        {
          // 需要 CDN 加速的包名称
          name: 'echarts',
          // 全局分配给模块的变量，Rollup 需要这个变量名称
          var: 'echarts',
          // 指定 CDN 上的加载路径
          path: `https://cdn.jsdelivr.net/npm/echarts@5.4.2/dist/echarts.min.js`
        }
      ]
    })
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
      'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js'
    }
  },
  build: {
    minify: 'terser',
    terserOptions: {
      // 清除console和debugger
      compress: {
        drop_console: true,
        drop_debugger: true
      }
    },
    rollupOptions: {
      output: {
        manualChunks: {
          // 每个 '键' 都表示一个分包块，'值' 包含列出的模块及其所有依赖项
          vue: ['vue', 'vue-router', 'pinia', 'axios', 'vue-axios', 'mitt', 'vue-i18n'],
          tool: ['lodash-es', 'moment', 'sass'],
          // echarts: ['echarts'],
          ui: ['element-plus']
        }
      }
    }
  }
})
